package cmd

import (
	"fmt"

	"oc_contributor_chenliangzhu/pkg/build"

	"github.com/spf13/cobra"
)

var BuildCmd = CreateBuildCmd()

func CreateBuildCmd() *cobra.Command {
	var (
		debug      bool
		outputPath string
	)

	var buildCmd = &cobra.Command{
		Use:   "build [IMPORTPATH...]",
		Short: "构建容器镜像",
		Long: `Build命令用于将Go应用程序构建为容器镜像。

示例:
  # 构建并发布当前目录的Go应用
  gopack build .

  # 构建并发布指定路径的Go应用
  gopack build ./cmd/app

  # 构建调试模式的镜像
  gopack build --debug .

  # 指定输出的镜像文件名
  gopack build -o my-app.tar .`,
		Args: cobra.MinimumNArgs(1), // 至少需要一个参数
		RunE: func(cmd *cobra.Command, args []string) error {
			// 1. 创建Builder实例
			b, err := build.NewBuilder(debug, args, outputPath)
			if err != nil {
				return fmt.Errorf("创建构建器失败: %w", err)
			}

			// 2. 调用Build方法执行构建
			if err := b.Build(); err != nil {
				return fmt.Errorf("构建失败: %w", err)
			}

			return nil
		},
	}

	buildCmd.Flags().BoolVarP(&debug, "debug", "d", false, "构建带有调试功能(集成Delve)的镜像")
	buildCmd.Flags().StringVarP(&outputPath, "output", "o", "gopack_image.tar", "指定输出镜像文件的路径")

	return buildCmd
}
